<?php

require_once 'classes/Adresse.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de Adresses
 */
class SCadresse implements SCinterface{
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute une adresse
    * @param Adresse Adresse à ajouter
    */
   public function ajouter($uneAdresseAAjouter) {
       
       $adresseMemorisee = null;
       
       try{
           
           $query =  $this->db->prepare("INSERT INTO adresse " .
                   "(ligne1, ligne2, ligne3, noRue, localite_npa) VALUES(" .
                   ":ligne1, :ligne2, :ligne3, :noRue, :localite_npa)");

           $query->execute(array(
                   'ligne1'          => $uneAdresseAAjouter->getLigne1(),
                   'ligne2'          => $uneAdresseAAjouter->getLigne2(),
                   'ligne3'          => $uneAdresseAAjouter->getLigne3(),
                   'noRue'           => $uneAdresseAAjouter->getNoRue(),
                   'localite_npa'    => $uneAdresseAAjouter->getLocalite_npa()
               ));
           $adresseMemorisee = $uneAdresseAAjouter;

               $query->closeCursor();
           
       }
       catch(PDOException $e)
        {
            return new Message("Adresse non ajoutée:".$e->getMessage());
        }
               return $uneAdresseAAjouter;
   }
    /**
     * Methode permettant de modifier une adresse
     * @param Adresse adresse à modifier
     * @return boolean 
     */
    public function modifier($uneAdresseAModifier){
        try{
           $query =  $this->db->prepare("UPDATE adresse SET " .
                   "ligne2=:ligne2, ligne3=:lign3, noRue=:noRue WHERE ligne1= :ligne1 AND localite_npa=:localite_npa;");

           $query->execute(array(
                   'ligne1'          => $uneAdresseAModifier->getLigne1(),
                   'ligne2'          => $uneAdresseAModifier->getLigne2(),
                   'ligne3'          => $uneAdresseAModifier->getLigne3(),
                   'noRue'           => $uneAdresseAModifier->getNoRue(),
                   'localite_npa'    => $uneAdresseAModifier->getLocalite_npa()
               ));
                   $this->db->query($query->queryString);
                $message = new Message("Adresse modifiée");
           
           }
                catch(PDOException $e)
        {
            return new Message("Adresse non modifiée:".$e->getMessage());
        }
               return $uneAdresseAModifier;
    }
    /**
     * Methode permettant de supprimer une adresse
     * @param Adresse Adresse à supprimer
     * @return boolean 
     */
    public function supprimer($uneAdresseASupprimer){
        try{
        $query = "DELETE FROM adresse WHERE localite_npa='".$uneAdresseASupprimer->getLocalite_npa()."' AND ligne1='".$uneAdresseASupprimer->getLigne1()."';";
                   
                $this->db->query($query);
                $message = new Message("Adresse supprimée");
                
                }
                catch(PDOException $e)
        {
            $message = new Message("Adresse non supprimée:".$e->getMessage());
        }
               return $message;
    }
   
    /**
     *
     * @param Adresse adresseALister de recherche sous forme d'objet Adresse
     * @return un tableau d'objet Adresse
     */
    public function lister($adresseALister){
        try{
         

            $sql="SELECT * FROM adresse ";
            $sql_Where="WHERE";
            if($adresseALister!=NULL)
            {
                if($adresseALister->getLigne1()!=NULL)
                    $sql_Where.=" ligne1 = '".addslashes ($adresseALister->getLigne1())."' AND ";
                if($adresseALister->getLigne2()!=NULL)
                    $sql_Where.=" ligne2 LIKE '%".addslashes ($adresseALister->getLigne2())."%' AND ";
                if($adresseALister->getLigne3()!=NULL)
                    $sql_Where.=" ligne3 LIKE '%".addslashes ($adresseALister->getLigne3())."%' AND ";
                if($adresseALister->getNoRue()!=NULL)
                    $sql_Where.=" noRue LIKE '%".$adresseALister->getNoRue()."%' AND  ";
                if($adresseALister->getLocalite_npa()!=NULL)
                    $sql_Where.=" localite_npa = '".$adresseALister->getLocalite_npa()."' AND ";
            }         
                
            $sql_Where = substr($sql_Where,0,-5); 
            $sql.=$sql_Where." ORDER BY localite_npa;";
            $lesAdressesTrouvees=NULL;
            $uneAdresseLue=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch(PDO::FETCH_ASSOC))
            {   
                $uneAdresseLue = new Adresse($row['ligne1'],$row['ligne2'],$row['ligne3'],$row['noRue'],$row['localite_npa']);
               
                    $lesAdressesTrouvees[]=$uneAdresseLue;
            }        
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesAdressesTrouvees=NULL;
        }
        return $lesAdressesTrouvees;
    }

  
}

?>
